﻿#ifndef WRPOPUPEDITBOX_H
#define WRPOPUPEDITBOX_H

#include <QLineEdit>
#include <QComboBox>
#include "WRPopupControl.h"

//表示弹出单选编。
class WRSOFT_GUIAPP_COMMON_CLASS WRPopupLineEdit : public QLineEdit
{
    Q_OBJECT

signals:
    //当需要弹出时
    void mousePressed(QMouseEvent *e);

protected:
    //鼠标按下事件处理。
    void mousePressEvent(QMouseEvent *e);
    //上下文菜单事件处理。
    void contextMenuEvent(QContextMenuEvent *e);
};

//表示弹出编辑框。
class WRSOFT_GUIAPP_COMMON_CLASS WRPopupEditBox : public QComboBox
{
    Q_OBJECT

private:
    WRPopupLineEdit* m_text;
    WRPopupControl* m_popup;

signals:
    //弹出时调用此方法。
    void popup(WRPopupControl*);
    //当关闭时调用此方法。
    void closed(WRPopupControl*);

private slots:
    //当文本鼠标按下处理。
    void onTextMousePressed(QMouseEvent *e);
    //当弹出关闭时调用此方法。
    void onPopupClosed(void);

protected:
    //初始化弹出编辑框。
    WRPopupEditBox(WRPopupControl* popup, QWidget* parent = 0);
    //清理当前对象所占用的相关资源。
    ~WRPopupEditBox();

    //获取弹出控件。
    template <class T> inline T* popupControl(void) const
    {
        return (T*)m_popup;
    }

    //当弹出时调用此方法。
    virtual void onPopup(WRPopupControl*);
    //当关闭时调用此方法。
    virtual void onClosed(WRPopupControl*);

    //当鼠标按下时调用此方法。
    void mousePressEvent(QMouseEvent *e);

public:
    //获取文本。
    inline QString getText() const
    {
        return m_text->text();
    }
    //设置文本。
    inline void setText(const QString& value)
    {
        m_text->setText(value);
    }

    //获取文本对齐方式。
    inline Qt::Alignment getTextAlignment() const
    {
        return m_text->alignment();
    }
    //设置文本对齐方式。
    inline void setTextAlignment(Qt::Alignment flag)
    {
        m_text->setAlignment(flag);
    }

    //获取文本字体。
    inline const QFont& getTextFont(void) const
    {
        return m_text->font();
    }
    //设置文本字体。
    inline void setTextFont(const QFont& value)
    {
        m_text->setFont(value);
    }
};

#endif // WRPOPUPEDITBOX_H
